home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib07.dsk
/
HI-RES DATA DISPLAY.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
7KB
|
254 lines
12 HOME : VTAB 5: HTAB 10: PRINT "GRAPHING PROGRAM 2"
13 VTAB 8: HTAB 12: PRINT "MONTH BY MONTH"
14 VTAB 15: HTAB 13: PRINT "R.M. SMYTHE"
15 FOR I = 1 TO 2000: NEXT
16 :
17 REM SET UP PROGRAM
18 :
19 GOSUB 10000: REM INITIALIZE HRCG
20 POKE -16302,0: LOMEM: 16400
25 DIM MO$(12): FOR I = 1 TO 12: READ MO$(I): NEXT I
26 DATA JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC
30 M$ = " "
40 S$ = " "
50 FLAG = 0:FLAG$ = ""
60 DIM X(52),Y(52)
70 D$ = CHR$(4):G$ = CHR$(7)
97 :
98 REM CONTROL CHARACTERS
99 :
100 CP$ = CHR$(16): REM CLEAR PAGE
110 CL$ = CHR$(12): REM LOWER CASE
120 CK$ = CHR$(11): REM UPPER CASE
130 CO$ = CHR$(15): REM OPTIONS
140 CS$ = CHR$(19): REM SHIFT
150 CY$ = CHR$(25): REM SET TEXT WINDOW TO FULL SCREEN
160 CA$ = CHR$(1): REM SELECT CHARACTER SET OR PAGE 1 OPTION
170 PRINT CO$,CA$: REM USE PG 1
190 GOTO 1000
197 :
198 REM DRAW X,Y AXES
199 :
200 PRINT CP$
210 GOSUB 600: REM ADD SCALES
220 HCOLOR= 3: HPLOT 31,20 TO 31,151 TO 275,151
230 RETURN
297 :
298 REM PLOT POINTS
299 :
300 FOR I = 1 TO N -1
310 X1 = INT(X(I) *FX%/MX +31)
320 Y1 = INT(151 -Y(I) *122/MY +.5)
330 X2 = INT(X(I +1) *FX%/MX +31)
340 Y2 = INT(151 -Y(I +1) *122/MY +.5)
350 HCOLOR= 3
360 FOR J = -1 TO 1: FOR K = -1 TO 1
370 HPLOT X1 +J,Y1 +K
380 NEXT K,J
390 HCOLOR= 3: HPLOT X1,Y1 TO X2,Y2: NEXT
400 FOR J = -1 TO 1: FOR K = -1 TO 1: HPLOT X2 +J,Y2 +K: NEXT K,J
410 RETURN
597 :
598 REM ADD SCALES TO GRAPH
599 :
600 VTAB 20: HTAB 5: PRINT HA$: VTAB 21: HTAB 5: PRINT SC$
605 IF S1$ < >"" THEN 610
606 VTAB 4: IF LEN( STR$(MY)) >4 THEN HTAB (4): GOTO 608
607 HTAB (8 - LEN( STR$(MY)))
608 PRINT MY: RETURN
610 V% = 20
620 H% = 4: VTAB 22:V$ = S1$: GOSUB 9000
630 H% = 3: VTAB 22:V$ = S2$: GOSUB 9000
640 H% = 2: VTAB 22:V$ = S3$: GOSUB 9000
650 RETURN
697 :
698 REM BEGIN INPUT
699 :
700 PRINT CP$;CL$;CK$;"HOW MANY ENTRIES PER ";: INPUT "MONTH ?";NN: IF NN <0 OR NN >4 OR INT(NN) < >NN THEN 700
710 VTAB 3: IF NN = 4 THEN INPUT "52 ENTRIES PER YEAR OR 48? ";FLAG$: IF FLAG$ < >"52" AND FLAG$ < >"48" THEN 710
720 IF FLAG$ = "52" THEN VTAB 6: PRINT " WEEK DATA": GOTO 740
730 VTAB 6: PRINT "MONTH DATA"
740 HCOLOR= 3
750 HPLOT 10,52 TO 150,52
760 HPLOT 75,42 TO 75,191
770 VTAB 8: PRINT CHR$(22)
780 MY = 0: IF FLAG$ = "52" THEN 900
790 I = 1:MX = NN *12: FOR J = 1 TO 12
800 HTAB 4: PRINT MO$(J);: FOR K = 1 TO NN
810 HTAB (14):X(I) = I -1
820 HPLOT 75,90 TO 75,191: INPUT Y(I)
850 IF Y(I) >MY THEN MY = Y(I)
870 I = I +1
880 NEXT K: PRINT : NEXT J
890 N = MX: RETURN
900 FOR J = 1 TO 52: HTAB 4: PRINT RIGHT$(" " + STR$(J),2);
910 HTAB (14):X(J) = J -1: HPLOT 75,90 TO 75,191: INPUT Y(J)
920 IF Y(J) >MY THEN MY = Y(J)
930 NEXT J
940 N = 52:MX = 52: RETURN
997 :
998 REM *** MAIN PROGRAM ***
999 :
1000 POKE 34,0: PRINT CY$;CP$
1010 GOSUB 700: REM INPUT DATA
1020 PRINT CY$;CP$: REM CLEAR FULL SCREEN
1030 GOSUB 4000: REM HORIZONTAL SCALE
1040 GOSUB 6000: REM VERTICAL SCALE
1050 GOSUB 200: REM DRAW AXES
1060 GOSUB 300: REM PLOT
1070 POKE -16368,0
1080 A = PEEK( -16384): IF A <128 THEN 1080
1090 POKE -16368,0
1100 A$ = CHR$(A -128)
1110 IF A$ = "H" THEN 1230
1120 IF A$ = "V" THEN 1190
1130 IF A$ = "T" THEN 1260
1140 IF A$ = "S" THEN 1300
1150 IF A$ = "A" THEN 1000
1160 IF A$ = "E" THEN VTAB 23: END
1170 FOR I = 1 TO 20: NEXT
1180 GOTO 1080
1190 H% = 1:V% = 20:L = 18
1200 GOSUB 8000
1210 FLAG = 1
1220 GOTO 1070
1230 L = 30:V% = 23
1240 GOSUB 7000
1250 GOTO 1070
1260 L = 35:V% = 2: GOSUB 7000: GOTO 1070
1270 :
1280 REM SAVE
1290 :
1300 VTAB 10: PRINT G$;G$
1310 F$ = ""
1320 POKE -16368,0
1330 A = PEEK( -16384): IF A <128 THEN 1330
1340 POKE -16368,0
1350 A$ = CHR$(A -128): IF A$ = CHR$(13) THEN 1380
1360 IF F$ = "" AND (A$ <"A" OR A$ >"Z") THEN 1300
1370 F$ = F$ +A$: GOTO 1330
1380 IF F$ = "" THEN 1300
1390 PRINT G$;G$;G$:F$ = "GR-" +F$
1400 PRINT D$;"BSAVE";F$;",A8192,L8192"
1410 GOTO 1070
3997 :
3998 REM HORIZONTAL SCALE
3999 :
4000 SC$ = "J F M A M J J A S O N D"
4010 HA$ = "' ' ' ' ' ' ' ' ' ' ' '"
4030 FX% = 247: RETURN
5997 :
5998 REM VERTICAL SCALE
5999 :
6000 S1$ = "":S2$ = S1$:S3$ = S2$: IF MY >100 THEN 6290
6010 IF MY >50 THEN MY = 100: GOTO 6100
6020 IF MY >20 THEN MY = 50: GOTO 6140
6030 IF MY >10 THEN MY = 20: GOTO 6170
6040 IF MY >5 THEN MY = 10: GOTO 6180
6050 IF MY >1 THEN MY = 5: GOTO 6200
6060 IF MY >.5 THEN MY = 1: GOTO 6210
6070 IF MY >.1 THEN MY = .5: GOTO 6230
6080 IF MY >.01 THEN MY = .1: GOTO 6250
6090 GOTO 6290
6100 S1$ = "0 0 0 0 0 0"
6110 S2$ = "0 8 6 4 2 "
6120 S3$ = "1 "
6130 RETURN
6140 S1$ = "0 0 0 0 0 0"
6150 S2$ = "5 4 3 2 1 "
6160 GOTO 6280
6170 S1$ = "0 6 2 8 4 0":S2$ = "2 1 1 ": GOTO 6280
6180 S1$ = "0 8 6 4 2 0"
6190 S2$ = "1 ": GOTO 6280
6200 S1$ = "5 4 3 2 1 0": GOTO 6270
6210 S1$ = "0 8 6 4 2 0":S2$ = ". . . . . "
6220 S3$ = "1 ": RETURN
6230 S1$ = "0 0 0 0 0 0":S2$ = "5 4 3 2 1 "
6240 S3$ = ". . . . . ": RETURN
6250 S1$ = "0 8 6 4 2 0":S2$ = "1 0 0 0 0 "
6260 S3$ = ". . . . . ": RETURN
6270 S2$ = " "
6280 S3$ = " ": RETURN
6290 RETURN : REM SCIENTIFIC NOTATION COULD GO HERE
6997 :
6998 REM LABEL X AXIS
6999 :
7000 B$ = MID$ (M$,1,L)
7010 VTAB V%
7020 GOSUB 7040
7030 RETURN
7040 I = 1
7050 H% = 40 -L -2
7060 HTAB (H%)
7070 PRINT MID$ (B$, LEN(B$) -L +1, LEN(B$));
7080 HTAB (H% +L)
7090 GET X$: IF X$ = CHR$(13) THEN 7210
7100 IF X$ < > CHR$(8) THEN 7150
7110 IF I = 1 THEN 7060
7120 B$ = MID$ (B$,1, LEN(B$) -1)
7130 I = I -1
7140 GOTO 7060
7150 IF I = L +1 THEN 7060
7170 IF ASC(X$) <32 THEN 7060
7180 B$ = B$ +X$
7190 I = I +1
7200 GOTO 7060
7210 B$ = MID$ (B$, LEN(B$) -I +2, LEN(B$))
7220 B$ = B$ + MID$ (S$,1,L - LEN(B$))
7230 PRINT
7240 RETURN
7997 :
7998 REM LABEL Y AXIS
7999 :
8000 B$ = MID$ (M$,1,L)
8010 HTAB H%
8020 VTAB (V%)
8030 GOSUB 8050
8040 RETURN
8050 I = 1
8060 VTAB (V%)
8070 V$ = MID$ (B$, LEN(B$) -L +1, LEN(B$)): GOSUB 9000: REM PRINT OUT VERTICAL STRING
8080 REM VTAB(V%-L%)
8090 GET X$: IF X$ = CHR$(13) THEN 8210
8100 IF X$ < > CHR$(8) THEN 8150
8110 IF I = 1 THEN 8060
8120 B$ = MID$ (B$,1, LEN(B$) -1)
8130 I = I -1
8140 GOTO 8060
8150 IF I = L +1 THEN 8060
8170 IF ASC(X$) <32 THEN 8060
8180 B$ = B$ +X$
8190 I = I +1
8200 GOTO 8060
8210 B$ = MID$ (B$, LEN(B$) -I +2, LEN(B$))
8220 B$ = B$ + MID$ (S$,1,L - LEN(B$))
8230 PRINT
8240 RETURN
8997 :
8998 REM PRINT OUT VERTICAL STRING
8999 :
9000 VTAB (V% - LEN(V$))
9010 FOR J = 1 TO LEN(V$)
9020 HTAB (H%)
9030 PRINT MID$ (V$,J,1)
9040 NEXT
9050 RETURN
9997 :
9998 REM INITIALIZE HRCG
9999 :
10000 ONERR GOTO 10130
10010 TEXT : HOME : HGR :ADRS = 0
10020 PRINT CHR$(4);"BLOAD RBOOT": CALL 520
10030 ADRS = USR(0),"HRCG"
10040 POKE 216,0
10050 IF ADRS <0 THEN ADRS = ADRS +65536
10060 CS = ADRS -768: HIMEM: CS
10070 D$ = CHR$(4)
10080 PRINT D$;"BLOAD ASCII.SET,A";CS
10090 CH = INT(CS/256):CL = CS -CH *256
10100 POKE ADRS +7,CL: POKE ADRS +8,CH: CALL ADRS +3
10110 RETURN
10130 TEXT
10140 PRINT "ERROR IN RLOAD OR RBOOT"
10150 POKE 216,0
10160 STOP